/**
 * 
 */
package com.ph.shopping.facade.agent.service;


import java.math.BigDecimal;
import java.util.List;

import com.ph.shopping.common.core.exception.BizException;
import com.ph.shopping.common.util.page.PageBean;
import com.ph.shopping.common.util.result.Result;
import com.ph.shopping.facade.agent.entity.Agent;
import com.ph.shopping.facade.agent.entity.AgentChargeRecord;
import com.ph.shopping.facade.agent.entity.AgentDrawcashRecord;
import com.ph.shopping.facade.agent.entity.AgentImage;
import com.ph.shopping.facade.agent.vo.AgentVo;
import com.ph.shopping.facade.agent.vo.UserBalanceRecordVo;

/**
 * @项目：phshopping-facade-agent
 *
 * @描述：代理商接口
 *
 * @作者： 舒豪
 *
 * @创建时间：2017年3月10日
 *
 * @Copyright @2017 by 舒豪
 */
public interface IAgentService {

    /**
     * 通过id获取代理详情
     * @param agent
     * @return AgentVo
     */
    AgentVo getAgentDetail(Agent agent);


    /**
     * 分页获取下级代理商列表
     * @param page
     * @param agent
     * @return Result
     */
    Result getAgentSons(PageBean page, Agent agent);

    /**
     * 分页获取待审核代理列表
     * @param page
     * @param agent
     * @return Result
     */
    Result getPendingAgent(PageBean page, Agent agent);

    /**
     * 分页获取代理列表
     * @param page
     * @param agent
     * @return Result
     */
    Result getAgentList(PageBean page, Agent agent);

    /**
     * 通过区域和代理级别查找该代理
     * @param agent 代理商实体
     * @return AgentVo
     */
    AgentVo getAgentByArea(Agent agent);

    /**
     * 新增代理
     *
     * @param agent     代理商实体
     * @param imageList 代理商图片集合
     * @return Result
     */
    Result addAgent(Agent agent, List<AgentImage> imageList) throws BizException;

    /**
     * 修改代理商
     *
     * @param agent     代理商实体
     * @param imageList 代理商图片集合
     * @return Result
     */
    Result updateAgent(Agent agent, List<AgentImage> imageList) throws BizException;

    /**
     * 修改代理状态
     *
     * @param agent 代理商实体，可修改冻结，通过，不通过，解冻
     * @return Result
     */
    Result updateAgentStatus(Agent agent) throws BizException;

    /**
     * 删除代理
     *
     * @param agent 代理商实体
     * @return Result
     */
    Result deleteAgent(Agent agent);


    /**
     * 通过区域查找市级代理
     *
     * @param agent 代理商实体
     * @return AgentVo
     */
    AgentVo getCityAgentByArea(Agent agent);

    /**
     * 获取代理商的余额记录流水
	  * @param userBalance 代理商余额记录
	  * @return List<BalanceRecordVo> 代理商余额记录集合
	  * @throws BizException
	  * @author liuy
     */
	Result getUserBalanceRecordVoList(PageBean pagebean, UserBalanceRecordVo userBalanceRecordVo);


    /**
     * 新增代理商充值记录
     * @param agentChargeRecord 代理商充值记录
     * @return Result
     */
    public Result addAgentChargeRecord(AgentChargeRecord agentChargeRecord) throws Exception;
    
    /**
     * 新增代理商提现记录
     * @param agentDrawcashRecord 代理商提现记录
     * @return Result
     */
    public Result addAgentDrawcashRecord(AgentDrawcashRecord agentDrawcashRecord) throws Exception;


	/**
     * 查询登陆人当天的已提现总额
     * @param agentDrawcashRecord 代理商提现记录
     * @return Result
     * @author 刘颖
     */
	BigDecimal getDrawcashMoneyToday(AgentDrawcashRecord agentDrawcashRecord) throws Exception ;
	 
 	/**
      * 查询登陆人提现待审核记录
      * @param agentDrawcashRecord 代理商提现记录
      * @return Result
      * @author 刘颖
      */
	BigDecimal getDrawcashStatusPendingTotal(AgentDrawcashRecord agentDrawcashRecord) throws Exception ;

}
